﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.DataVisualization.Charting;
using System.Data;
using Teenusekiht;
using System.ServiceModel;

public partial class Statistika : System.Web.UI.Page
{
    IService1 sc;
    int kasutajaID;

    protected void Page_Load(object sender, EventArgs e)
    {
        sc = new ChannelFactory<IService1>("Serv").CreateChannel();

        if (Request.QueryString["user"] == null) //Response.Redirect("~/Default.aspx");
        {
            if (Session["sess"] == null) Session["sess"] = SessionStatic.CreateSession();
            SessionData sesDat = SessionStatic.GetData((int)Session["sess"]);
            if (sesDat.UserId == null) 
                Response.Redirect("~/Default.aspx");
            else kasutajaID = (int)sesDat.UserId;
        }
        else if (int.TryParse(Request.QueryString["user"], out kasutajaID)) { }
        else Response.Redirect("~/Default.aspx");

        string userRole = sc.SaidiKasutajaLiik(kasutajaID, Rakendus.RAKENDUSE_KOOD);

        if (userRole.Equals("Admin"))
        {
            KuvaPieGraafikTana();
            KuvaPieGraafikViimaneNadal();
            KuvaPieGraafikKuu();
            KuvaPieGraafikKokku();

            KuvaColumnid();
        }
        else
        {
            Response.Redirect("~/Default.aspx");
        }

    }

    private void KuvaPieGraafikTana()
    {
        // Kuva 3D Pie Chart
        ChartPieTana.Series[0].ChartType = SeriesChartType.Pie;
        ChartPieTana.Series[0]["PieLabelStyle"] = "Inside";
        ChartPieTana.ChartAreas[0].Area3DStyle.Enable3D = true;

        // Pealkiri
        ChartPieTana.Titles.Add("Teenuse kasutus rakenduste poolt tänase päeva jooksul");

        IService1 sc = new ChannelFactory<IService1>("Serv").CreateChannel();
        Dictionary<string, long> andmed = sc.StatistikaRakendusteKohtaTana(Rakendus.RAKENDUSE_KOOD);

        // Andmete lisamine
        long summa = 0;
        int rakendusi_kokku = 0;
        foreach (var info in andmed)
        {
            summa += info.Value;
            rakendusi_kokku++;
        }
        string[] xVaartused = new string[rakendusi_kokku];
        int[] yVaartused = new int[rakendusi_kokku];
        int count = 0, suurim = 0;
        foreach (var rakendus in andmed)
        {
            if (summa == 0)
                summa = 1;
            long protsent = rakendus.Value * 100 / summa;
            xVaartused[count] = rakendus.Key + " - " + protsent.ToString() + "%";
            yVaartused[count] = (int)protsent;
            count++;
        }

        int max = 0;
        for (int i = 0; i < yVaartused.Length; i++)
        {
            if (max < yVaartused[i])
            {
                max = yVaartused[i];
                suurim = i;
            }
        }
        sc.Dispose();

        ChartPieTana.Series[0].Points.DataBindXY(xVaartused, yVaartused);


        // Kõike populaarsem "välja lõigata"
        ChartPieTana.Series[0].Points[suurim]["Exploded"] = "true";


        // Legendi kuvamine
        ChartPieTana.Legends.Add(new Legend("Rakendused"));
        ChartPieTana.Legends["Rakendused"].Title = "Rakendused";
        ChartPieTana.Series[0].Legend = "Rakendused";

    }

    private void KuvaPieGraafikViimaneNadal()
    {
        // Kuva 3D Pie Chart
        ChartPieViimaneNadal.Series[0].ChartType = SeriesChartType.Pie;
        ChartPieViimaneNadal.Series[0]["PieLabelStyle"] = "Inside";
        ChartPieViimaneNadal.ChartAreas[0].Area3DStyle.Enable3D = true;

        // Pealkiri
        ChartPieViimaneNadal.Titles.Add("Teenuse kasutus rakenduste poolt viimase nädala jooksul");

        IService1 sc = new ChannelFactory<IService1>("Serv").CreateChannel();
        Dictionary<string, long> andmed = sc.StatistikaRakendusteKohtaViimaneNadal(Rakendus.RAKENDUSE_KOOD);

        // Andmete lisamine
        long summa = 0;
        int rakendusi_kokku = 0;
        foreach (var info in andmed)
        {
            summa += info.Value;
            rakendusi_kokku++;
        }
        string[] xVaartused = new string[rakendusi_kokku];
        int[] yVaartused = new int[rakendusi_kokku];
        int count = 0, suurim = 0;
        foreach (var rakendus in andmed)
        {
            if (summa == 0)
                summa = 1;
            long protsent = rakendus.Value * 100 / summa;
            xVaartused[count] = rakendus.Key + " - " + protsent.ToString() + "%";
            yVaartused[count] = (int)protsent;
            count++;
        }

        int max = 0;
        for (int i = 0; i < yVaartused.Length; i++)
        {
            if (max < yVaartused[i])
            {
                max = yVaartused[i];
                suurim = i;
            }
        }
        sc.Dispose();

        ChartPieViimaneNadal.Series[0].Points.DataBindXY(xVaartused, yVaartused);


        // Kõike populaarsem "välja lõigata"
        ChartPieViimaneNadal.Series[0].Points[suurim]["Exploded"] = "true";


        // Legendi kuvamine
        ChartPieViimaneNadal.Legends.Add(new Legend("Rakendused"));
        ChartPieViimaneNadal.Legends["Rakendused"].Title = "Rakendused";
        ChartPieViimaneNadal.Series[0].Legend = "Rakendused";

    }

    private void KuvaPieGraafikKuu()
    {
        // Kuva 3D Pie Chart
        ChartPieSeeKuu.Series[0].ChartType = SeriesChartType.Pie;
        ChartPieSeeKuu.Series[0]["PieLabelStyle"] = "Inside";
        ChartPieSeeKuu.ChartAreas[0].Area3DStyle.Enable3D = true;

        // Pealkiri
        ChartPieSeeKuu.Titles.Add("Teenuse kasutus rakenduste poolt sellel kuul");

        IService1 sc = new ChannelFactory<IService1>("Serv").CreateChannel();
        Dictionary<string, long> andmed = sc.StatistikaRakendusteKohtaSellelKuul(Rakendus.RAKENDUSE_KOOD);

        // Andmete lisamine
        long summa = 0;
        int rakendusi_kokku = 0;
        foreach (var info in andmed)
        {
            summa += info.Value;
            rakendusi_kokku++;
        }
        string[] xVaartused = new string[rakendusi_kokku];
        int[] yVaartused = new int[rakendusi_kokku];
        int count = 0, suurim = 0;
        foreach (var rakendus in andmed)
        {
            if (summa == 0)
                summa = 1;
            long protsent = rakendus.Value * 100 / summa;
            xVaartused[count] = rakendus.Key + " - " + protsent.ToString() + "%";
            yVaartused[count] = (int)protsent;
            count++;
        }

        int max = 0;
        for (int i = 0; i < yVaartused.Length; i++)
        {
            if (max < yVaartused[i])
            {
                max = yVaartused[i];
                suurim = i;
            }
        }
        sc.Dispose();

        ChartPieSeeKuu.Series[0].Points.DataBindXY(xVaartused, yVaartused);
        

        // Kõike populaarsem "välja lõigata"
        ChartPieSeeKuu.Series[0].Points[suurim]["Exploded"] = "true";


        // Legendi kuvamine
        ChartPieSeeKuu.Legends.Add(new Legend("Rakendused"));
        ChartPieSeeKuu.Legends["Rakendused"].Title = "Rakendused";
        ChartPieSeeKuu.Series[0].Legend = "Rakendused";

    }

    private void KuvaPieGraafikKokku()
    {
        // Kuva 3D Pie Chart
        ChartPieKokku.Series[0].ChartType = SeriesChartType.Pie;
        ChartPieKokku.Series[0]["PieLabelStyle"] = "Inside";
        ChartPieKokku.ChartAreas[0].Area3DStyle.Enable3D = true;

        // Pealkiri
        ChartPieKokku.Titles.Add("Teenuse kasutus rakenduste poolt kogu aja vältel");

        IService1 sc = new ChannelFactory<IService1>("Serv").CreateChannel();
        Dictionary<string, long> andmed = sc.StatistikaRakendusteKohtaKokku(Rakendus.RAKENDUSE_KOOD);            

        // Andmete lisamine
        long summa = 0;
        int rakendusi_kokku = 0;
        foreach (var info in andmed)
        {
            if (summa == 0)
                summa = 1;
            summa += info.Value;
            rakendusi_kokku++;
        }
        string[] xVaartused = new string[rakendusi_kokku];
        int[] yVaartused = new int[rakendusi_kokku];
        int count = 0, suurim = 0;
        foreach (var rakendus in andmed)
        {
            long protsent = rakendus.Value * 100 / summa;
            xVaartused[count] = rakendus.Key + " - " + protsent.ToString() +"%";
            yVaartused[count] = (int)protsent;
            count++;
        }

        int max = 0;
        for (int i = 0; i < yVaartused.Length; i++)
        {
            if (max < yVaartused[i])
            {
                max = yVaartused[i];
                suurim = i;
            }
        }
        sc.Dispose();

        ChartPieKokku.Series[0].Points.DataBindXY(xVaartused, yVaartused);


        // Kõike populaarsem "välja lõigata"
        ChartPieKokku.Series[0].Points[suurim]["Exploded"] = "true";


        // Legendi kuvamine
        ChartPieKokku.Legends.Add(new Legend("Rakendused"));
        ChartPieKokku.Legends["Rakendused"].Title = "Rakendused";
        ChartPieKokku.Series[0].Legend = "Rakendused";

    }


    private void KuvaColumnid()
    {
        IService1 sc = new ChannelFactory<IService1>("Serv").CreateChannel();

        ColumnChartTana.Series["Series1"].ChartType = SeriesChartType.Column;
        ColumnChartTana.Series["Series1"]["DrawingStyle"] = "Emboss";
        ColumnChartTana.Series["Series1"].IsValueShownAsLabel = true;        
        Dictionary<string, long> andmed = sc.StatistikaMeetoditeKohtaTana(Rakendus.RAKENDUSE_KOOD);
        FillData(andmed, 1);

        ColumnChartViimaneNadal.Series["Series1"].ChartType = SeriesChartType.Column;
        ColumnChartViimaneNadal.Series["Series1"]["DrawingStyle"] = "Emboss";
        ColumnChartViimaneNadal.Series["Series1"].IsValueShownAsLabel = true;
        Dictionary<string, long> andmed2 = sc.StatistikaMeetoditeKohtaViimaneNadal(Rakendus.RAKENDUSE_KOOD);
        FillData(andmed2, 2);

        ColumnChartSellelKuul.Series["Series1"].ChartType = SeriesChartType.Column;
        ColumnChartSellelKuul.Series["Series1"]["DrawingStyle"] = "Emboss";
        ColumnChartSellelKuul.Series["Series1"].IsValueShownAsLabel = true;
        Dictionary<string, long> andmed3 = sc.StatistikaMeetoditeKohtaSellelKuul(Rakendus.RAKENDUSE_KOOD);
        FillData(andmed3, 3);

        ColumnChartKokku.Series["Series1"].ChartType = SeriesChartType.Column;
        ColumnChartKokku.Series["Series1"]["DrawingStyle"] = "Emboss";
        ColumnChartKokku.Series["Series1"].IsValueShownAsLabel = true;
        Dictionary<string, long> andmed4 = sc.StatistikaMeetoditeKohtaKokku(Rakendus.RAKENDUSE_KOOD);
        FillData(andmed4, 4);

        sc.Dispose();
    }

    private void FillData(Dictionary<string, long> andmed, int valik)
    {
        DataTable dt = new DataTable();
        DataColumn dc;

        dc = new DataColumn();
        dc.ColumnName = "Meetod";
        dt.Columns.Add(dc);
        dc = new DataColumn();
        dc.ColumnName = "Paringuid";
        dt.Columns.Add(dc);

        DataRow dr;
        foreach (var meetod in andmed)
        {
            dr = dt.NewRow();
            dr["Meetod"] = meetod.Key;
            dr["Paringuid"] = meetod.Value;
            dt.Rows.Add(dr);
        }

        if (valik == 1)
        {
            ColumnChartTana.DataSource = dt;
            ColumnChartTana.Series["Series1"].XValueMember = "Meetod";
            ColumnChartTana.Series["Series1"].YValueMembers = "Paringuid";
            ColumnChartTana.DataBind();
        }
        else if (valik == 2)
        {
            ColumnChartViimaneNadal.DataSource = dt;
            ColumnChartViimaneNadal.Series["Series1"].XValueMember = "Meetod";
            ColumnChartViimaneNadal.Series["Series1"].YValueMembers = "Paringuid";
            ColumnChartViimaneNadal.DataBind();
        }
        else if (valik == 3)
        {
            ColumnChartSellelKuul.DataSource = dt;
            ColumnChartSellelKuul.Series["Series1"].XValueMember = "Meetod";
            ColumnChartSellelKuul.Series["Series1"].YValueMembers = "Paringuid";
            ColumnChartSellelKuul.DataBind();
        }
        else if (valik == 4)
        {
            ColumnChartKokku.DataSource = dt;
            ColumnChartKokku.Series["Series1"].XValueMember = "Meetod";
            ColumnChartKokku.Series["Series1"].YValueMembers = "Paringuid";
            ColumnChartKokku.DataBind();
        }
        else
        {
        }
    }


}